/*
 * Copyright (C) 2010-2011 Graz University of Technology, Austria. All Rights reserved. 
 *
 * Contact: Simone Kopeinik <simone.kopeinik@tugraz.at>
 * 	   Graz University of Technology, Knowledge Management Institute, Brückenkopfgasse 1/6, 8020 Graz 	
 * 	   <http://www.kmi.tugraz.at/>
 * 
 * This software is part of the TARGET platform developed by the
 * TARGET EC-funded project www.reachyourtarget.org
 *
 * This software is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 3.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * The GNU General Public License is available at <http://www.gnu.org/licenses/>.
 *
 */

package at.tugraz.kmi.css.cbkst2;

import java.util.Set;

/**
 * Assessment of psychological variables.
 * 
 * @author Georg Öttl
 * @param <V>
 *            The type of the variable to use.
 * 
 */
public interface Assessement {

	/**
	 * Updates/computes the marginals of the latent variables. This computes the
	 * marginals.
	 */
	void computeMarginals();
	/**
	 * 
	 * Updates the probability for an outcome of a latent variable.
	 * 
	 * @param variableId
	 *            The variable to increase the probability.
	 * @param outcome
	 *            The outcome of the variable to increase. Currently the
	 *            outcomes 1 and 0 are possible outcomes.
	 * 
	 */
	void increaseProbability(String variableId, int outcome);

	/**
	 * Looks up the marginal distribution of a certain latent variable.
	 * 
	 * @param variableId
	 *            A variable ID.
	 * 
	 * @param outcome
	 *            The outcome of the variable. Currently the outcomes 1 and 0
	 *            are possible outcomes.
	 * 
	 * @return The marginal probability for a certain variable.
	 */
	double lookupMarginal(String variableId, int outcome);

	/**
	 * @return All variable IDS from the current assessment.
	 */
	Set<String> variableIDs();

}